<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Title</title>
</head>
<body>

</body>
<script>
	// * 创建一个空对象`obj`（`{}`）
	// * 将`obj`的`[__proto__]`属性指向构造函数的原型（即`obj.[[__proto__]] = constrc.prototype`）
	// * 将构造函数内部的`this`绑定到新建的对象`obj`，执行构造函数（也就是跟调用普通函数一样，只是此时函数的this为新创建的对象`obj`而已）
	// * 若构造函数没有返回非原始值（即不是引用类型的值），则返回该新建的对象`obj`（默认会添加`return this`）。否则，返回引用类型的值。
	
	// 1- 会创建一个空的对象，并将当前的this指向到该对象。
	// 2- 构造函数会得到执行
	// 3- 隐式返回创建的对象
	// 4- 返回对象当中的__proto__ 指向到 Box.prorotype
	const Box = function(){
		this.userName = "zhangsan";
		this.age = 12;
		// return undefined;
		// return [1,2,3];
		// return {
		// 	a:1,
		// 	b:2,
		// 	c:3
		// }
		return function(){
		
		}
	}
	const obj = new Box();
	console.log(obj);
	// console.log(obj.__proto__ === Box.prototype);
	// console.log(obj);
	
</script>
</html>